/*
 * Created on 24/06/2005
 *
 */
package com.master.bd.calculo_frete;

import java.sql.*;

import com.master.ed.*;
import com.master.root.*;
import com.master.util.*;
import com.master.util.bd.*;
import com.master.util.ed.*;



public class Localiza_Tabela extends Calcula_Frete {

    protected String DM_FOB_Dirigido = null;
    protected String OID_Pessoa = null;
    protected String OID_Cliente = null;


    protected String sql = null;


    public Localiza_Tabela(ExecutaSQL executasql) {
        super(executasql);
        // .println("Calcula frete LT novo");
    }

    protected Tabela_FreteBean escolheTabela(Calcula_FreteED ed)
    throws Excecoes{


        // .println("Localiza_Tabela 2");

        Tabela_FreteBean tabelaFreteED;
        try {

          tabelaFreteED = buscaTabela(ed);

          if ("N".equals(tabelaFreteED.getDM_Localizado()) &&
                  (ed.getOID_Pessoa_Destinatario().equals(ed.getOID_Pessoa_Pagador()))){

                // .println("Localiza_Tabela 2 b");


              sql =  " SELECT DM_FOB_Dirigido FROM Clientes ";
              sql += " WHERE Clientes.OID_Pessoa = '" + ed.getOID_Pessoa() + "'";

              rs = null;
              rs = this.executasql.executarConsulta(sql);

              while (rs.next()){
                  DM_FOB_Dirigido = rs.getString("DM_FOB_Dirigido");
              }

              if ("S".equals(DM_FOB_Dirigido)){

                // .println("Localiza_Tabela 2 b FOB_Dirigido Remet");

                  ed.setOID_Pessoa_Pagador_Tabela(ed.getOID_Pessoa());
                  tabelaFreteED = buscaTabela(ed);
              }
          }

          if ("N".equals(tabelaFreteED.getDM_Localizado()) &&
                  (ed.getOID_Pessoa().equals(ed.getOID_Pessoa_Pagador()))){

                // .println("Localiza_Tabela 2 b FOB_Dirigido Dest");

              sql =  " SELECT DM_FOB_Dirigido FROM Clientes ";
              sql += " WHERE Clientes.OID_Pessoa = '" + ed.getOID_Pessoa_Destinatario() + "'";

              rs = null;
              rs = this.executasql.executarConsulta(sql);

              while (rs.next()){
                  DM_FOB_Dirigido = rs.getString("DM_FOB_Dirigido");
              }

              if (DM_FOB_Dirigido != null && DM_FOB_Dirigido.equals("S")){
                  ed.setOID_Pessoa_Pagador_Tabela(ed.getOID_Pessoa_Destinatario());

                  tabelaFreteED = buscaTabela(ed);

              }
          }

          if (tabelaFreteED.getDM_Localizado().equals("N") && ed.getDM_Percurso_Busca().equals("Origem_Destino") &&  ed.getDM_Tabela_Reversa().equals("S")){
              ed.setDM_Percurso_Busca("Destino_Origem");
              tabelaFreteED = buscaTabela(ed);
          }

          if (tabelaFreteED.getDM_Localizado().equals("N") && ed.getDM_Tem_Tabela_Unidade().equals("S")){
              // .println("Localiza_Tabela 2 b Tabela_Unidade");
              sql =  " SELECT oid_Pessoa from Unidades ";
              sql += " WHERE Unidades.oid_unidade =" + ed.getOID_Unidade();
              rs = this.executasql.executarConsulta(sql);

              if (rs.next()){
                  ed.setOID_Pessoa_Pagador_Tabela(String.valueOf(rs.getString("oid_Pessoa")));
                  tabelaFreteED = buscaTabela(ed);

                  if (tabelaFreteED.getDM_Localizado().equals("N") ){
                    ed.setOID_Produto((Parametro_FixoED.getInstancia().getOID_Produto()));
                    tabelaFreteED = buscaTabela(ed);
                  }
              }
          }

          if (!"S".equals(tabelaFreteED.getDM_Localizado())) {
              // .println("Localiza_Tabela 2 b Parametro_FixoED");

              String oid_PessoaAnterior = ed.getOID_Pessoa_Pagador_Tabela();
              ed.setOID_Pessoa_Pagador_Tabela(Parametro_FixoED.getInstancia().getOID_Pessoa_Padrao_Tabela_Frete());
              tabelaFreteED = buscaTabela(ed);

              if (tabelaFreteED.getDM_Localizado ().equals ("N")) {
                ed.setOID_Produto ( (Parametro_FixoED.getInstancia ().getOID_Produto ()));
                tabelaFreteED = buscaTabela (ed);
              }

              ed.setOID_Pessoa_Pagador_Tabela(oid_PessoaAnterior);
          }

        } catch (Exception e) {
            throw new Excecoes(e.getMessage(), e, getClass().getName(), "escolheTabela(Calcula_FreteED ed, ResultSet rsTabela)");
        }
        return tabelaFreteED;
    }



    protected Tabela_FreteBean buscaTabela(Calcula_FreteED ed)
    throws Excecoes{

        String sql = null;
        Tabela_FreteBean tabED = new Tabela_FreteBean();
	    FormataDataBean DataFormatada = new FormataDataBean ();
        // .println("ed.getDM_Tem_Cidade() buscaTabela =" + ed.getDM_Tem_Cidade());
        // .println("ed.getDM_Tem_Estado() buscaTabela =" + ed.getDM_Tem_Estado());


        OID_Pessoa = ed.getOID_Pessoa_Pagador_Tabela();

        // .println(" acha tabela 3  pessoa=" + OID_Pessoa);

        // .println("ed.getNR_Peso_Tabela(): " + ed.getNR_Peso_Tabela());


    	//.println("OID_Pessoa="+OID_Pessoa);

        try{
        	boolean clienteTabela = false;
        	if ( OID_Pessoa!=null && !OID_Pessoa.equals("") && !OID_Pessoa.equals("null")) {
        		clienteTabela = true;
		        sql =  " SELECT NR_Dias_Bloqueio, DT_Ultimo_Movimento FROM Clientes " +
		        	" WHERE NR_Dias_Bloqueio>0 " +
		        	" AND	Clientes.OID_Cliente = '" + OID_Pessoa + "'";

		        ResultSet rsCli = this.executasql.executarConsulta(sql);
		        if (rsCli.next()){
		        	if (rsCli.getLong("NR_Dias_Bloqueio")>0) {
				        DataFormatada.setDT_FormataData (rsCli.getString("DT_Ultimo_Movimento"));
				        String dtUltMov=DataFormatada.getDT_FormataData ();
		        		if (Data.comparaData(Data.getDataDMY(),">", Data.getSomaDiaData(dtUltMov, rsCli.getInt("NR_Dias_Bloqueio")))){
		        			 clienteTabela = false;
		        		}
		        	}
		        }
        	}

        	//.println("clienteTabela="+clienteTabela);

	        if (clienteTabela) {
	        	//-------------------------CIDADE---------------------------------------------
	            if (ed.getDM_Tem_Cidade().equals("S")) {

	              // .println(" acha tabela 3 ed.getDM_Tem_Cidade() " + tabED.getDM_Localizado());

	                if (tabED.getDM_Localizado().equals("N")){

	                  // .println(" abuscaTabela 1 ");

	                    sql =  " SELECT oid_Tabela_Frete FROM Tabelas_Fretes ";
	                    sql += " WHERE Tabelas_Fretes.OID_Pessoa = '" + OID_Pessoa + "'";

	                    // .println(" abuscaTabela 2 ");

	                    if (ed.getDM_Percurso_Busca().equals("Origem_Destino")) {
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Cidade_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Cidade_Destino();
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'C'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'C'";

	                    }

	                    // .println(" abuscaTabela 3 ");

	                    if (ed.getDM_Percurso_Busca().equals("Destino_Origem")) {
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Cidade_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Cidade_Destino();
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'C'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'C'";
	                    }


	                    // .println(" abuscaTabela 4 ");

	                    sql += this.setaParametros(ed);

//// (" abuscaTabela 1-> " + sql);

	                    rsTabela = this.executasql.executarConsulta(sql);
	                    while (rsTabela.next()){
	                        tabED = this.carregaTabela(rsTabela);
	                    }
	                }


	                if (tabED.getDM_Localizado().equals("N")){
	                    sql =  " SELECT oid_Tabela_Frete FROM Tabelas_Fretes ";
	                    sql += " WHERE Tabelas_Fretes.OID_Pessoa = '" + OID_Pessoa + "'";
	                    if (ed.getDM_Percurso_Busca().equals("Origem_Destino")) {
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Cidade_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Regiao_Destino();
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'C'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'R'";

	                    }
	                    if (ed.getDM_Percurso_Busca().equals("Destino_Origem")) {
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Cidade_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Regiao_Destino();
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'R'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'C'";
	                    }
	                    sql += this.setaParametros(ed);

	                    rsTabela = this.executasql.executarConsulta(sql);
	                    while (rsTabela.next()){
	                        tabED = this.carregaTabela(rsTabela);
	                    }
	                }

	                if (tabED.getDM_Localizado().equals("N")){
	                    sql =  " SELECT oid_Tabela_Frete FROM Tabelas_Fretes ";
	                    sql += " WHERE Tabelas_Fretes.OID_Pessoa = '" + OID_Pessoa + "'";
	                    if (ed.getDM_Percurso_Busca().equals("Origem_Destino")) {
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Cidade_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Subregiao_Destino();
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'C'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'S'";

	                    }
	                    if (ed.getDM_Percurso_Busca().equals("Destino_Origem")) {
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Cidade_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Subregiao_Destino();
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'S'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'C'";

	                    }

	                    sql += this.setaParametros(ed);

	                    // .println(" cidade/subreg-> " + sql);

	                    rsTabela = this.executasql.executarConsulta(sql);
	                    while (rsTabela.next()){

	                        ////// .println(" CIDADE sub ok ");

	                        tabED = this.carregaTabela(rsTabela);
	                    }
	                }

	                //// .println(" acha tabela 20 ");

	                if (tabED.getDM_Localizado().equals("N")){
	                    sql =  " SELECT oid_Tabela_Frete FROM Tabelas_Fretes ";
	                    sql += " WHERE Tabelas_Fretes.OID_Pessoa = '" + OID_Pessoa + "'";
	                    if (ed.getDM_Percurso_Busca().equals("Origem_Destino")) {
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Cidade_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Estado_Destino();
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'C'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'E'";

	                    }
	                    if (ed.getDM_Percurso_Busca().equals("Destino_Origem")) {
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Cidade_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Estado_Destino();
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'E'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'C'";
	                    }

	                    sql += this.setaParametros(ed);
	                    // .println(sql);
	                    rsTabela = this.executasql.executarConsulta(sql);
	                    while (rsTabela.next()){
	                        tabED = this.carregaTabela(rsTabela);
	                    }
	                }

	                //// .println(" acha tabela 30 ");


	                if (tabED.getDM_Localizado().equals("N")){
	                    sql =  " SELECT oid_Tabela_Frete FROM Tabelas_Fretes ";
	                    sql += " WHERE Tabelas_Fretes.OID_Pessoa = '" + OID_Pessoa + "'";
	                    if (ed.getDM_Percurso_Busca().equals("Origem_Destino")) {
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Cidade_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Destino = 1 ";
	                    }
	                    if (ed.getDM_Percurso_Busca().equals("Destino_Origem")) {
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Cidade_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Origem =  1 ";
	                    }
	                    sql += " AND Tabelas_Fretes.DM_Origem = 'C'";
	                    sql += " AND Tabelas_Fretes.DM_Destino = 'P'";

	                    sql += this.setaParametros(ed);

	                    rsTabela = this.executasql.executarConsulta(sql);
	                    while (rsTabela.next()){
	                        tabED = this.carregaTabela(rsTabela);
	                    }
	                }
	            }

	            //// .println(" acha tabela 40 ");

	            //-------------------------REGIAO ESTADO--------------------------------------
	            if (ed.getDM_Tem_Regiao_Estado().equals("S")) {

	                if (tabED.getDM_Localizado().equals("N")){
	                    sql =  " SELECT oid_Tabela_Frete FROM Tabelas_Fretes ";
	                    sql += " WHERE Tabelas_Fretes.OID_Pessoa = '" + OID_Pessoa + "'";
	                    if (ed.getDM_Percurso_Busca().equals("Origem_Destino")) {
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Regiao_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Cidade_Destino();
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'R'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'C'";
	                    }
	                    if (ed.getDM_Percurso_Busca().equals("Destino_Origem")) {
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Regiao_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Cidade_Destino();
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'C'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'R'";
	                    }

	                    sql += this.setaParametros(ed);

	                    rsTabela = this.executasql.executarConsulta(sql);
	                    while (rsTabela.next()){
	                        tabED = this.carregaTabela(rsTabela);
	                    }
	                }
	// .println(" acha tabela 40 "+tabED.getDM_Localizado());
	                if (tabED.getDM_Localizado().equals("N")){
	                    sql =  " SELECT oid_Tabela_Frete FROM Tabelas_Fretes ";
	                    sql += " WHERE Tabelas_Fretes.OID_Pessoa = '" + OID_Pessoa + "'";
	                    if (ed.getDM_Percurso_Busca().equals("Origem_Destino")) {
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Regiao_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Regiao_Destino();
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'R'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'R'";
	                    }
	                    if (ed.getDM_Percurso_Busca().equals("Destino_Origem")) {
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Regiao_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Regiao_Destino();
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'R'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'R'";
	                    }
	                    sql += this.setaParametros(ed);
	// .println(sql);
	                    rsTabela = this.executasql.executarConsulta(sql);
	                    while (rsTabela.next()){
	                      // .println("achou");
	                        tabED = this.carregaTabela(rsTabela);
	                    }
	                }

	                if (tabED.getDM_Localizado().equals("N")){
	                    sql =  " SELECT oid_Tabela_Frete FROM Tabelas_Fretes ";
	                    sql += " WHERE Tabelas_Fretes.OID_Pessoa = '" + OID_Pessoa + "'";
	                    if (ed.getDM_Percurso_Busca().equals("Origem_Destino")){
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Regiao_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Subregiao_Destino();
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'R'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'S'";
	                    }
	                    if (ed.getDM_Percurso_Busca().equals("Destino_Origem")) {
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Regiao_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Subregiao_Destino();
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'S'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'R'";
	                    }
	                    sql += this.setaParametros(ed);

	                    rsTabela = this.executasql.executarConsulta(sql);
	                    while (rsTabela.next()){
	                        tabED = this.carregaTabela(rsTabela);
	                    }
	                }

	                if (tabED.getDM_Localizado().equals("N")){
	                    sql =  " SELECT oid_Tabela_Frete FROM Tabelas_Fretes ";
	                    sql += " WHERE Tabelas_Fretes.OID_Pessoa = '" + OID_Pessoa + "'";
	                    if (ed.getDM_Percurso_Busca().equals("Origem_Destino")) {
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Regiao_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Estado_Destino();
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'R'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'E'";
	                    }
	                    if (ed.getDM_Percurso_Busca().equals("Destino_Origem")) {
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Regiao_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Estado_Destino();
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'E'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'R'";
	                    }
	                    sql += this.setaParametros(ed);

	                    rsTabela = this.executasql.executarConsulta(sql);
	                    while (rsTabela.next()){
	                        tabED = this.carregaTabela(rsTabela);
	                    }
	                }
	            }

	            //// .println(" acha tabela 60 ");

	            //-------------------------SUBREGIAO------------------------------------------
	            if (ed.getDM_Tem_Subregiao().equals("S")) {

	                if (tabED.getDM_Localizado().equals("N")){
	                    sql =  " SELECT oid_Tabela_Frete FROM Tabelas_Fretes ";
	                    sql += " WHERE Tabelas_Fretes.OID_Pessoa = '" + OID_Pessoa + "'";
	                    if (ed.getDM_Percurso_Busca().equals("Origem_Destino")) {
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Subregiao_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Cidade_Destino();
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'S'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'C'";

	                    }
	                    if (ed.getDM_Percurso_Busca().equals("Destino_Origem")) {
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Subregiao_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Cidade_Destino();
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'C'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'S'";

	                    }
	                    sql += this.setaParametros(ed);

	                    rsTabela = this.executasql.executarConsulta(sql);
	                    while (rsTabela.next()){
	                        ////// .println(" ok SUB CIDADE");

	                        tabED = this.carregaTabela(rsTabela);
	                    }
	                }

	                if (tabED.getDM_Localizado().equals("N")){
	                    sql =  " SELECT oid_Tabela_Frete FROM Tabelas_Fretes ";
	                    sql += " WHERE Tabelas_Fretes.OID_Pessoa = '" + OID_Pessoa + "'";
	                    if (ed.getDM_Percurso_Busca().equals("Origem_Destino")) {
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Subregiao_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Subregiao_Destino();
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'S'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'S'";
	                    }
	                    if (ed.getDM_Percurso_Busca().equals("Destino_Origem")) {
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Subregiao_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Subregiao_Destino();
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'S'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'S'";
	                    }

	                    sql += this.setaParametros(ed);


	                    // .println(" Sub / Sub= " + sql);

	                    rsTabela = this.executasql.executarConsulta(sql);
	                    while (rsTabela.next()){
	                        tabED = this.carregaTabela(rsTabela);
	                    }
	                }

	                if (tabED.getDM_Localizado().equals("N")){
	                    sql =  " SELECT oid_Tabela_Frete FROM Tabelas_Fretes ";
	                    sql += " WHERE Tabelas_Fretes.OID_Pessoa = '" + OID_Pessoa + "'";
	                    if (ed.getDM_Percurso_Busca().equals("Origem_Destino")) {
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Subregiao_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Estado_Destino();
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'S'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'E'";
	                    }
	                    if (ed.getDM_Percurso_Busca().equals("Destino_Origem")) {
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Subregiao_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Estado_Destino();
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'E'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'S'";
	                    }
	                    sql += this.setaParametros(ed);

	                    rsTabela = this.executasql.executarConsulta(sql);
	                    while (rsTabela.next()){
	                        tabED = this.carregaTabela(rsTabela);
	                    }
	                }

	                //// .println(" acha tabela 80 ");


	                if (tabED.getDM_Localizado().equals("N")){
	                    sql =  " SELECT oid_Tabela_Frete FROM Tabelas_Fretes ";
	                    sql += " WHERE Tabelas_Fretes.OID_Pessoa = '" + OID_Pessoa + "'";
	                    if (ed.getDM_Percurso_Busca().equals("Origem_Destino")) {
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Cidade_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Destino = 1 ";
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'S'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'P'";
	                    }
	                    if (ed.getDM_Percurso_Busca().equals("Destino_Origem")) {
	                        sql += " AND Tabelas_Fretes.OID_Destino = 1 ";
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Cidade_Origem();
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'P'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'S'";
	                    }

	                    sql += this.setaParametros(ed);

	                    rsTabela = this.executasql.executarConsulta(sql);
	                    while (rsTabela.next()){
	                        tabED = this.carregaTabela(rsTabela);
	                    }
	                }

	            }

	            //// .println(" acha tabela 90 ");


	            //-------------------------ESTADO---------------------------------------------
	            if (ed.getDM_Tem_Estado().equals("S")) {

	              // .println(" acha tabela 3 ed.getDM_Tem_Estado() " + tabED.getDM_Localizado());


	                if (tabED.getDM_Localizado().equals("N")){
	                    sql =  " SELECT oid_Tabela_Frete FROM Tabelas_Fretes ";
	                    sql += " WHERE Tabelas_Fretes.OID_Pessoa = '" + OID_Pessoa + "'";
	                    if (ed.getDM_Percurso_Busca().equals("Origem_Destino")) {
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Estado_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Cidade_Destino();
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'E'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'C'";
	                    }
	                    if (ed.getDM_Percurso_Busca().equals("Destino_Origem")) {
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Estado_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Cidade_Destino();
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'C'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'E'";
	                    }
	                    sql += this.setaParametros(ed);
	                    // .println("===========>" + sql);

	                    rsTabela = this.executasql.executarConsulta(sql);
	                    while (rsTabela.next()){
	                        tabED = this.carregaTabela(rsTabela);
	                    }


	                }

	                if (tabED.getDM_Localizado().equals("N")){
	                    sql =  " SELECT oid_Tabela_Frete FROM Tabelas_Fretes ";
	                    sql += " WHERE Tabelas_Fretes.OID_Pessoa = '" + OID_Pessoa + "'";
	                    if (ed.getDM_Percurso_Busca().equals("Origem_Destino")) {
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Estado_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Regiao_Destino();
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'E'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'R'";
	                    }
	                    if (ed.getDM_Percurso_Busca().equals("Destino_Origem")) {
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Estado_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Regiao_Destino();
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'R'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'E'";
	                    }

	                    sql += this.setaParametros(ed);

	                    rsTabela = this.executasql.executarConsulta(sql);
	                    while (rsTabela.next()){
	                        tabED = this.carregaTabela(rsTabela);
	                    }
	                }


	                if (tabED.getDM_Localizado().equals("N")){
	                    sql =  " SELECT oid_Tabela_Frete FROM Tabelas_Fretes ";
	                    sql += " WHERE Tabelas_Fretes.OID_Pessoa = '" + OID_Pessoa + "'";
	                    if (ed.getDM_Percurso_Busca().equals("Origem_Destino")) {
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Estado_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Subregiao_Destino();
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'E'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'S'";
	                    }
	                    if (ed.getDM_Percurso_Busca().equals("Destino_Origem")) {
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Estado_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Subregiao_Destino();
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'S'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'E'";

	                    }

	                    sql += this.setaParametros(ed);

	                    rsTabela = this.executasql.executarConsulta(sql);
	                    while (rsTabela.next()){
	                        tabED = this.carregaTabela(rsTabela);
	                    }
	                }


	                if (tabED.getDM_Localizado().equals("N")){
	                    sql =  " SELECT oid_Tabela_Frete FROM Tabelas_Fretes ";
	                    sql += " WHERE Tabelas_Fretes.OID_Pessoa = '" + OID_Pessoa + "'";
	                    if (ed.getDM_Percurso_Busca().equals("Origem_Destino")) {
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Estado_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Estado_Destino();
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'E'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'E'";
	                    }
	                    if (ed.getDM_Percurso_Busca().equals("Destino_Origem")) {
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Estado_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Estado_Destino();
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'E'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'E'";
	                    }
	                    sql += this.setaParametros(ed);

	                    // .println(" acha tabela 3 eTem_Estado() " + sql);


	                    rsTabela = this.executasql.executarConsulta(sql);
	                    while (rsTabela.next()){
	                        // .println(" ACHOI UF UF");

	                        tabED = this.carregaTabela(rsTabela);
	                    }
	                }
	            }

	                if (tabED.getDM_Localizado().equals("N")){
	                    sql =  " SELECT oid_Tabela_Frete FROM Tabelas_Fretes ";
	                    sql += " WHERE Tabelas_Fretes.OID_Pessoa = '" + OID_Pessoa + "'";
	                    if (ed.getDM_Percurso_Busca().equals("Origem_Destino")) {
	                        sql += " AND Tabelas_Fretes.OID_Origem = " + ed.getOID_Estado_Origem();
	                        sql += " AND Tabelas_Fretes.OID_Destino = 1 ";
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'E'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'P'";
	                    }
	                    if (ed.getDM_Percurso_Busca().equals("Destino_Origem")) {
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Estado_Destino();
	                        sql += " AND Tabelas_Fretes.OID_Origem = 1 ";
	                        sql += " AND Tabelas_Fretes.DM_Origem = 'P'";
	                        sql += " AND Tabelas_Fretes.DM_Destino = 'E'";
	                    }
	                    sql += this.setaParametros(ed);

	                    // .println(" acha tabela 3 eTem_Estado() " + sql);


	                    rsTabela = this.executasql.executarConsulta(sql);
	                    while (rsTabela.next()){
	                        // .println(" ACHOI UF UF");

	                        tabED = this.carregaTabela(rsTabela);
	                    }
	                }


	            //// .println(" acha tabela 100 ");

	            //-------------------------PAIS-----------------------------------------------
	            if (ed.getDM_Tem_Pais().equals("S")) {

	                if (tabED.getDM_Localizado().equals("N")){
	                    sql =  " SELECT oid_Tabela_Frete FROM Tabelas_Fretes ";
	                    sql += " WHERE Tabelas_Fretes.OID_Pessoa = '" + OID_Pessoa + "'";
	                    if (ed.getDM_Percurso_Busca().equals("Origem_Destino")) {
	                        sql += " AND Tabelas_Fretes.OID_Origem = 1 ";
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Cidade_Destino();
	                    }
	                    if (ed.getDM_Percurso_Busca().equals("Destino_Origem")) {
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Cidade_Destino();
	                        sql += " AND Tabelas_Fretes.OID_Origem = 1 ";
	                    }

	                    sql += " AND Tabelas_Fretes.DM_Origem = 'P'";
	                    sql += " AND Tabelas_Fretes.DM_Destino = 'C'";
	                    sql += this.setaParametros(ed);

	                    rsTabela = this.executasql.executarConsulta(sql);
	                    while (rsTabela.next()){
	                        tabED = this.carregaTabela(rsTabela);
	                    }
	                }


	                if (tabED.getDM_Localizado().equals("N")){

	                    //// .println(" acha tabela 120 ");
	                    sql =  " SELECT oid_Tabela_Frete FROM Tabelas_Fretes ";
	                    sql += " WHERE Tabelas_Fretes.OID_Pessoa = '" + OID_Pessoa + "'";
	                    if (ed.getDM_Percurso_Busca().equals("Origem_Destino")) {
	                        sql += " AND Tabelas_Fretes.OID_Origem = 1 ";
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Regiao_Destino();
	                    }
	                    if (ed.getDM_Percurso_Busca().equals("Destino_Origem")) {
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Regiao_Destino();
	                        sql += " AND Tabelas_Fretes.OID_Origem = 1 ";
	                    }
	                    sql += " AND Tabelas_Fretes.DM_Origem = 'P'";
	                    sql += " AND Tabelas_Fretes.DM_Destino = 'R'";

	                    sql += this.setaParametros(ed);

	                    rsTabela = this.executasql.executarConsulta(sql);
	                    while (rsTabela.next()){
	                        tabED = this.carregaTabela(rsTabela);
	                    }
	                }


	                if (tabED.getDM_Localizado().equals("N")){
	                    //// .println(" acha tabela 130 ");

	                    sql =  " SELECT oid_Tabela_Frete FROM Tabelas_Fretes ";
	                    sql += " WHERE Tabelas_Fretes.OID_Pessoa = '" + OID_Pessoa + "'";
	                    if (ed.getDM_Percurso_Busca().equals("Origem_Destino")) {
	                        sql += " AND Tabelas_Fretes.OID_Origem = 1 ";
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Subregiao_Destino();
	                    }
	                    if (ed.getDM_Percurso_Busca().equals("Destino_Origem")) {
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Subregiao_Destino();
	                        sql += " AND Tabelas_Fretes.OID_Origem = 1 ";
	                    }

	                    sql += " AND Tabelas_Fretes.DM_Origem = 'P'";
	                    sql += " AND Tabelas_Fretes.DM_Destino = 'S'";

	                    sql += this.setaParametros(ed);

	                    rsTabela = this.executasql.executarConsulta(sql);
	                    while (rsTabela.next()){
	                        tabED = this.carregaTabela(rsTabela);
	                    }
	                }


	                if (tabED.getDM_Localizado().equals("N")){
	                    //// .println(" acha tabela 150 ");

	                    sql =  " SELECT oid_Tabela_Frete FROM Tabelas_Fretes ";
	                    sql += " WHERE Tabelas_Fretes.OID_Pessoa = '" + OID_Pessoa + "'";
	                    if (ed.getDM_Percurso_Busca().equals("Origem_Destino")) {
	                        sql += " AND Tabelas_Fretes.OID_Origem = 1 ";
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Estado_Destino();
	                    }
	                    if (ed.getDM_Percurso_Busca().equals("Destino_Origem")) {
	                        sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Estado_Destino();
	                        sql += " AND Tabelas_Fretes.OID_Origem = 1 ";
	                    }

	                    sql += " AND Tabelas_Fretes.DM_Origem = 'P'";
	                    sql += " AND Tabelas_Fretes.DM_Destino = 'E'";
	                    sql += this.setaParametros(ed);

	                    rsTabela = this.executasql.executarConsulta(sql);
	                    while (rsTabela.next()){
	                        tabED = this.carregaTabela(rsTabela);
	                    }

	                }
	                if (tabED.getDM_Localizado().equals("N")){

	                    //// .println(" acha tabela 160 ");

	                    sql =  " SELECT oid_Tabela_Frete FROM Tabelas_Fretes ";
	                    sql += " WHERE Tabelas_Fretes.OID_Pessoa = '" + OID_Pessoa + "'";
	                    //           if (ed.getDM_Percurso_Busca().equals("Origem_Destino")) {
	                    //
	                    //              sql += " AND Tabelas_Fretes.OID_Origem = 1 ";
	                    //              sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Cidade_Destino();
	                    //            }
	                    //            if (ed.getDM_Percurso_Busca().equals("Destino_Origem")) {
	                    //              sql += " AND Tabelas_Fretes.OID_Destino = " + ed.getOID_Cidade_Destino();
	                    //              sql += " AND Tabelas_Fretes.OID_Origem = 1 ";
	                    //            }

	                    sql += " AND Tabelas_Fretes.DM_Origem = 'P'";
	                    sql += " AND Tabelas_Fretes.DM_Destino = 'P'";

	                    sql += this.setaParametros(ed);

	                    rsTabela = this.executasql.executarConsulta(sql);
	                    while (rsTabela.next()){
	                        tabED = this.carregaTabela(rsTabela);
	                    }
	                }
	            }
//// (tabED.getDM_Localizado());
	            if ("S".equals(tabED.getDM_Localizado())) {
	                CidadeBean cidade;
	                try {
	                    cidade = CidadeBean.getByOID(new Long(ed.getOID_Cidade_Destino()).intValue());
	                } catch (Exception e) {
	                    throw new Excecoes(e.getMessage(), e, getClass().getName(), "localizaTabela(Calcula_FreteED ed)");
	                }
	                tabED.setDM_Tipo_Localizacao_Destino(cidade.getDM_Tipo_Localizacao());
	            }
        	}
        } catch(SQLException e){
            throw new Excecoes(e.getMessage(), e, getClass().getName(), "localizaTabela(Calcula_FreteED ed)");
        }
        return tabED;
    }


    protected String setaParametros(Calcula_FreteED ed)
    throws Excecoes{


        // .println(" setaParametros ->> " + ed.getDM_Tipo_Tabela_Frete ());

        String sql="";

        if (ed.getDM_Tabela_Cliente_Entregador ().equals ("E")) {
          sql += " AND Tabelas_Fretes.OID_Pessoa_Redespacho = '" + OID_Cliente + "'";
        }

        if (ed.getDM_Tem_Produto ().equals ("S")) {
          sql += " AND Tabelas_Fretes.OID_Produto = " + ed.getOID_Produto ();
        }

        if (ed.getDM_Tem_Empresa ().equals ("S")) {
          sql += " AND Tabelas_Fretes.OID_Empresa = " + ed.getOID_Empresa ();
        }

        if (ed.getDM_Tem_Peso ().equals ("S")) {
            sql += " AND Tabelas_Fretes.NR_Peso_Inicial >= " +ed.getNR_Peso_Tabela ();
            sql += " AND Tabelas_Fretes.NR_Peso_Final  <= " + ed.getNR_Peso_Tabela ();
        }
        if (ed.getDM_Tem_Modal ().equals ("S")) {
          sql += " AND Tabelas_Fretes.OID_Modal = " + ed.getOID_Modal ();
        }
        if (ed.getDM_Tem_Vigencia ().equals ("S")) {
          sql += " AND Tabelas_Fretes.DT_Vigencia <= '" + ed.getDT_Emissao () + "'";
        }
        if (ed.getDM_Tem_Validade ().equals ("S")) {
          sql += " AND Tabelas_Fretes.DT_Validade >= '" + ed.getDT_Emissao () + "'";
        }
        if (ed.getDM_Tipo_Transporte ().equals ("R")) {
          sql += " AND (Tabelas_Fretes.VL_Frete > 0 OR Tabelas_Fretes.VL_R_Ate10 > 0 OR Tabelas_Fretes.VL_Outros2 > 0 OR Tabelas_Fretes.VL_Taxas > 0 OR Tabelas_Fretes.VL_R_Acima200 > 0  OR Tabelas_Fretes.PE_AD_VALOREM > 0) ";
        }
        if (ed.getDM_Tipo_Tabela_Frete ().equals ("D")) {
          sql += " AND Tabelas_Fretes.VL_D_Ate1C > 0 ";
        }
        if (ed.getDM_Tipo_Tabela_Frete ().equals ("E")) {
          sql += " AND Tabelas_Fretes.VL_E_Ate1 > 0  ";
        }
        if (ed.getDM_Tipo_Tabela_Frete ().equals ("C")) {
          sql += " AND (Tabelas_Fretes.VL_C_Ate25 > 0  OR Tabelas_Fretes.VL_R_Ate10 > 0 )";
        }
        if (ed.getDM_Tipo_Tabela_Frete ().equals ("Standard")) {
          sql += " AND Tabelas_Fretes.VL_C_Ate25 > 0  ";
        }
        if (ed.getDM_Tipo_Tabela_Frete ().equals ("Expressa")) {
          sql += " AND Tabelas_Fretes.VL_D_Ate1C > 0  ";
        }
        if (ed.getDM_Tipo_Tabela_Frete ().equals ("Espec001")) {
          sql += " AND Tabelas_Fretes.VL_Especial1 > 0  ";
        }
        if (ed.getDM_Tipo_Tabela_Frete ().equals ("Espec010")) {
          sql += " AND Tabelas_Fretes.VL_Especial2 > 0  ";
        }
        if (ed.getDM_Tipo_Tabela_Frete ().equals ("Espec020")) {
          sql += " AND Tabelas_Fretes.VL_Especial3 > 0  ";
        }
        if (ed.getDM_Tipo_Tabela_Frete ().equals ("Espec020")) {
          sql += " AND Tabelas_Fretes.VL_Especial3 > 0  ";
        }
        if (ed.getDM_Tipo_Tabela_Frete ().equals ("Espec070")) {
          sql += " AND Tabelas_Fretes.VL_Especial4 > 0  ";
        }
        if (ed.getDM_Tipo_Tabela_Frete ().equals ("Espec080")) {
          sql += " AND Tabelas_Fretes.VL_Especial5 > 0  ";
        }
        if (ed.getDM_Tipo_Tabela_Frete ().equals ("Espec140")) {
          sql += " AND Tabelas_Fretes.VL_Especial6 > 0  ";
        }
        if (ed.getDM_Tipo_Tabela_Frete ().equals ("Espec180")) {
          sql += " AND Tabelas_Fretes.VL_Especial7 > 0  ";
        }
        if (ed.getDM_Tipo_Tabela_Frete ().equals ("Espec200")) {
          sql += " AND Tabelas_Fretes.VL_Especial8 > 0  ";
        }
        if (ed.getDM_Tipo_Tabela_Frete ().equals ("Espec210")) {
          sql += " AND Tabelas_Fretes.VL_Especial9 > 0  ";
        }
        if (ed.getDM_Tipo_Tabela_Frete ().equals ("Espec240")) {
          sql += " AND Tabelas_Fretes.VL_Especial10 > 0  ";
        }

        sql += " ORDER BY Tabelas_Fretes.DT_Vigencia ASC  ";


        return sql;
    }


    protected Tabela_FreteBean carregaTabela(ResultSet rsTabela) throws Excecoes{

        Tabela_FreteBean tabED;
        try {
			tabED = Tabela_FreteBean.getByOID(rsTabela.getLong("oid_tabela_frete"));
        } catch (Exception e) {
            throw new Excecoes(e.getMessage(), e, getClass().getName(), "carregaTabela(Calcula_FreteED ed, ResultSet rsTabela)");
        }

        // .println("carregaTabela 2");

        NR_Prazo_Entrega=new Long(tabED.getNR_Prazo_Entrega()).intValue();

        NR_Prazo_Entrega_C=tabED.getNR_Prazo_Entrega_C();
        NR_Prazo_Entrega_D=tabED.getNR_Prazo_Entrega_D();
        NR_Prazo_Entrega_E=tabED.getNR_Prazo_Entrega_E();
        NR_Prazo_Entrega_R=tabED.getNR_Prazo_Entrega_R();

        oid_Tabela_Frete = String.valueOf(tabED.getOID());


        DM_ICMS_Incluso_Frete=tabED.getDM_ICMS();
        tabED.setDM_Localizado("S");

        // .println("oid_Tabela_Frete->>" + oid_Tabela_Frete);
        // .println("NR_Prazo_Entrega->>" + NR_Prazo_Entrega);

        return tabED;
    }


}
